package cn.demoncat.util.quartz.constant;

import java.util.LinkedHashMap;

/**
 * Job常量
 * 
 * @author 延晓磊
 *
 * @since 2017年9月14日
 */
public class JobConstant {

	/**
	 * Handler：作为JobDataMap中"任务Handler"的Key
	 */
	public static final String HANDLER = "Handler";
	/**
	 * Params：作为JobDataMap中"任务参数"的Key
	 */
	public static final String PARAMS = "Params";

	/**
	 * 任务触发模式
	 * 
	 * 规则：组合 time, timeout, count,cron,endTime,forever；是1/否0
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年9月14日
	 */
	public static final class TriggerType {
 
		/**
		 * 手动触发(立即执行一次)
		 */
		public static final String NONE = "000000";
		/**
		 * 指定时间执行一次
		 */
		public static final String TIME_ONCE = "100000";
		/**
		 * 指定超时后执行一次
		 */
		public static final String TIMEOUT_ONCE = "010000";
		/**
		 * 指定时间起超时后执行一次
		 */
		public static final String TIME_TIMEOUT_ONCE = "110000";
		/**
		 * 永久间隔执行
		 */
		public static final String TIMEOUT_FOREVER = "010001";
		/**
		 * 间隔执行指定次数
		 */
		public static final String TIMEOUT_COUNT = "011000";
		/**
		 * 指定时间起永久间隔执行
		 */
		public static final String TIME_TIMEOUT_FOREVER = "110001";
		/**
		 * 指定时间起间隔执行指定次数
		 */
		public static final String TIME_TIMEOUT_COUNT = "111000";
		/**
		 * 间隔执行到指定时间
		 */
		public static final String TIMEOUT_ENDTIME = "010010";
		/**
		 * 指定时间起间隔执行到指定时间
		 */
		public static final String TIME_TIMEOUT_ENDTIME = "110010";
		/**
		 * 根据CRON表达式执行
		 */
		public static final String CRON = "000100";
		/**
		 * 指定时间起根据CRON表达式执行
		 */
		public static final String TIME_CRON = "100100";
		/**
		 * 根据CRON表达式执行到指定时间
		 */
		public static final String CRON_ENDTIME = "000110";
		/**
		 * 指定时间起根据CRON表达式执行到指定时间
		 */
		public static final String TIME_CRON_ENDTIME = "100110";
 
		/**
		 * 任务触发模式Map
		 */
		public static final LinkedHashMap<String,String> MAP = new LinkedHashMap<String,String>(){ 
			private static final long serialVersionUID = 1L;
		{
			put(NONE,"手动触发");
			
			put(TIME_ONCE,"指定时间执行一次");
			
			put(TIMEOUT_ONCE,"指定间隔后执行一次");
			put(TIME_TIMEOUT_ONCE,"指定时间起间隔后执行一次");
			put(TIMEOUT_FOREVER,"永久间隔执行");
			put(TIMEOUT_COUNT,"间隔执行指定次数");
			put(TIME_TIMEOUT_FOREVER,"指定时间起永久间隔执行");
			put(TIME_TIMEOUT_COUNT,"指定时间起间隔执行指定次数");
			put(TIMEOUT_ENDTIME,"间隔执行到指定时间");
			put(TIME_TIMEOUT_ENDTIME,"指定时间起间隔执行到指定时间");
			
			put(CRON,"根据CRON表达式执行");
			put(TIME_CRON,"指定时间起根据CRON表达式执行");
			put(CRON_ENDTIME,"根据CRON表达式执行到指定时间");
			put(TIME_CRON_ENDTIME,"指定时间起根据CRON表达式执行到指定时间");
		}};

		/**
		 * 判断是否为CRON表达式
		 *
		 * @param type
		 * @return
		 *
		 * @author 延晓磊
		 *
		 * @since 2020年7月7日
		 */
		public static boolean isCron(String type) {
			return type.charAt(3) == '1';
		}
	}

}
